package ar.edu.utn.frba.disenio.fechas;

import java.util.Calendar;
import java.util.GregorianCalendar;

public final class Fecha {
	Formato formato;
	GregorianCalendar fecha = new GregorianCalendar();
	
	public Fecha(Formato varFormato, String varStrFecha) {
		setFormato(varFormato);
		fecha.setTime(formato.parsearFecha(varStrFecha));
	}
	
	private void setFormato(Formato varFormato){
		formato = varFormato;
	}
	
	public void setTime(int hora,int minutos){
		fecha.set(Calendar.HOUR_OF_DAY, hora);
		fecha.set(Calendar.MINUTE , minutos);
	}
	public int getHora() {
		return fecha.get(Calendar.HOUR_OF_DAY);
	}
	public long diferenciaDiasConLaFecha(Fecha otraFecha){
		long diferenciaEnMiliSegundos = Math.abs(this.enHoras() - otraFecha.enHoras());
		System.out.print(this.getDia()+ " " + this.getMes() + " " + otraFecha.getDia() + " " + this.getMes());
		long milisegundosPorDia = 1000 * 60 * 60 * 24;
		return diferenciaEnMiliSegundos / milisegundosPorDia;
	}

	private Calendar getFecha() {
		return fecha;
	}
	
	public Long enHoras(){
		return this.getFecha().getTimeInMillis()/(1000*60*60);
	}
	
	public boolean esAnteriorA(Fecha otraFecha){
		return fecha.compareTo(otraFecha.getFecha()) < 0;
		
	}

	public int getDia() {
		return getFecha().get(Calendar.DATE);
	}
	
	public int getMes() {
		return (getFecha().get(Calendar.MONTH)+1);
	}
	
	public int getAnio() {
		return getFecha().get(Calendar.YEAR);
	}

	public void setTimeEnString(String horario) {
		String[] arrayHorarios = horario.split(":");
		this.setTime(Integer.parseInt(arrayHorarios[0]),Integer.parseInt(arrayHorarios[1]));
	}
	
}
